package JavaShengSai2;

/**
 * 3. 平面切分
 * https://www.lanqiao.cn/problems/503/learning/?page=2&first_category_id=1&tags=2020,%E7%9C%81%E8%B5%9B&tag_relation=intersection&sort=pass_rate&asc=0
 */

import java.util.Scanner;

/**
 直线与直线之间存在 3种情况，为：平行、重合、相交
 重合：就是 y1=a1x + b1 和 y2=a2x + b2 中的 a1==a2 && b1==b2 (优先判断)
 如果重合的话就将这条直线去掉，并且将总的直线也同样去除，防止后面进行重复判断
 平行：就是 y1=a1x + b1 和 y2=a2x + b2 中的 a1==a2
 (这里因为判断平行的时候已经判断完重合了，如果不重合，那么说明条件不满足，如果平行条件满足的话，说明b1和b2不等，那么这里只需判断x即可)
 相交：如果重合和平行都不是，那必然相交了
 相交的话就是 y1=a1x + b1 和 y2=a2x + b2 中的 (y1==y2) => (a1x + b1 = a2x + b2) => (a1x - a2x = b2 -b1)
 这个 (a1x - a2x = b2 -b1) => ((a1 - a2)x = b2 - b1) => (x = (b2 - b1)/(a1 - a2))
 也就是判断相交的点的计算，之后还需要进行判断当前直线之前是否存在相交之后的点也是这个值，如果是那么说明重复了，就不进行计算
 这样平行和相交就需一起判断
 */
public class Main3 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        int[] a = new int[n]; // 记录每一条直线的a值
        int[] b = new int[n]; // 记录每一条直线的b值
        double[] c = new double[n - 1]; // 记录相交之后对应的点的值。这里n-1是因为 两条直线相交只有一个交点，所以n条直线相交减少一个值
        int count = 1; // 表示平面的部分，一开始必然有一个平面
        // 进行遍历判断，每输入一次都进行判断
        for(int i = 0;i < n;i++) {
            a[i] = scan.nextInt();
            b[i] = scan.nextInt();
            // 第一条直线的时候，会将平面分为两份
            if(i == 0) {
                count++;
                continue; // 退出后面的操作，直接进行下一个遍历
            }

            // 当两条直线之后进行判断
            // 判断当前直线是否和前面的直线重合
            int flag = 0;
            for(int j = 0;j < i;j++) {
                if(a[j] == a[i] && b[j] == b[i]) {
                    // 存在重合
                    flag = 1;
                }
            }
            if(flag == 1) {
                i--;
                n--;
                continue;
            }

            // 判断当前直线是否和前面的直线平行
            int x = 0; // 记录平行的个数
            for(int j = 0;j < i;j++) {
                if(a[j] == a[i]) {
                    // 平行
                    x++;
                    continue;
                }

                // 不平行那么就是相交，就需要进行计算
                // 先计算相加的节点值，这里的c的下标是用 j - x 计算的，也就是 当前遍历到的位置 - 前面判断过平行的个数，就是下标
                c[j - x] = (double) (b[j] - b[i]) / (double) (a[i] - a[j]);
                // 判断前面的相交节点是否和这个值相等
                int flag2 = 0;
                for(int k = 0;k < j - x;k++) {
                    // 这里需要的是 c 对应的下标
                    if(c[k] == c[j - x]) {
                        flag2 = 1;
                    }
                }
                if(flag2 == 0) {
                    // 每次与一条直线相交的话，那么就将平面的个数+1
                    count++;
                }
            }
            count++; // 这个是当前直线本身分出的的平面也要+1
        }
        System.out.println(count);
        scan.close();
    }
}
